昨天,我們把基尼係數算完,那今天,我打算建立bagging算法函數:
對於有n個資料的資料集,我們取出m個資料(m<=n),這m個資料採用:自助抽樣法
(也就是每次從n筆資料中取出一筆,取完之後直接放資料裡那代表該資料有機會再次被選取)
而重複這件事m次,就會得到一個子資料集m1
而再重複這件事,就會得到資料集m1,m2…mk當成訓練集,再針對訓練集下去做模型來取得k個模型後,再針對這k個模型去做取平均值、取多數票等方法,如圖:
所以以下是關於bagging的程式碼實際執行:基本上會設定m和k,但在隨機森林裡,我們想要建立隨機樹,而樹的特徵也是隨機選取,所以再篩選樹的特徵時, 我們要用隨機方式選取d個特徵,程式碼如下(我先不用dataFrame來寫(比較好理解),在後面完整實作時,再改用dataFrame):
import random as rd
#一個5維資料,共5筆,data(第0維為y)
data=[[1,"a",0.852,5,1.5],[2,"b",0.31,8,8.1],[1,"b",0.589,9,5.6],[1,"c",0.01,8,2.3],[2,"c",0.258,10,1.1]]
#預設m=4:表示重複抽資料4次;k=5:表示5組資料;d=3:隨機選三個特徵
def bagging_k(data,m=4,k=5,d=3):
n=len(data)
#建立放全部資料的data_k
data_k=[]
for j in range(k):
data_use1=[]
#選取除目標以外d個特徵
features = rd.sample(range(1,n), d)
#把目標加回去
features.insert(0,0)
features.sort()
print("第",j+1,"組特徵:",features)
for r in range(n):
data_use2=[]
for q in features:
data_use2.extend([data[r][q]])
data_use1.append(data_use2)
#data_use1其實就是data資料-->只是只選擇特徵下的資料
data_m=[]
#重複抽樣過程
for i in range(m):
rows=rd.randint(0, len(data_use1)-1)
data_m.append(data_use1[rows])
print("第",j+1,"組數據:",data_m)
data_k.append(data_m)
return data_k
print("全部數據:",bagging_k(data))
結果如下:
第 1 組特徵: [0, 1, 3, 4]
第 1 組數據: [[2, 'b', 8, 8.1], [2, 'b', 8, 8.1], [1, 'a', 5, 1.5], [1, 'b', 9, 5.6]]
第 2 組特徵: [0, 2, 3, 4]
第 2 組數據: [[1, 0.01, 8, 2.3], [1, 0.01, 8, 2.3], [2, 0.31, 8, 8.1], [2, 0.31, 8, 8.1]]
第 3 組特徵: [0, 1, 2, 3]
第 3 組數據: [[1, 'c', 0.01, 8], [2, 'c', 0.258, 10], [2, 'b', 0.31, 8], [1, 'b', 0.589, 9]]
第 4 組特徵: [0, 1, 2, 4]
第 4 組數據: [[2, 'b', 0.31, 8.1], [2, 'c', 0.258, 1.1], [2, 'c', 0.258, 1.1], [1, 'a', 0.852, 1.5]]
第 5 組特徵: [0, 1, 2, 4]
第 5 組數據: [[1, 'b', 0.589, 5.6], [2, 'c', 0.258, 1.1], [1, 'c', 0.01, 2.3], [2, 'b', 0.31, 8.1]]
全部數據: [[[2, 'b', 8, 8.1], [2, 'b', 8, 8.1], [1, 'a', 5, 1.5], [1, 'b', 9, 5.6]], [[1, 0.01, 8, 2.3], [1, 0.01, 8, 2.3], [2, 0.31, 8, 8.1], [2, 0.31, 8, 8.1]], [[1, 'c', 0.01, 8], [2, 'c', 0.258, 10], [2, 'b', 0.31, 8], [1, 'b', 0.589, 9]], [[2, 'b', 0.31, 8.1], [2, 'c', 0.258, 1.1], [2, 'c', 0.258, 1.1], [1, 'a', 0.852, 1.5]], [[1, 'b', 0.589, 5.6], [2, 'c', 0.258, 1.1], [1, 'c', 0.01, 2.3], [2, 'b', 0.31, 8.1]]]
好,今天實作部分就到這,明天再開始做分類動作
蒼蠅飛到了小屋內,停留在燈泡上,燈泡光芒慢慢的變亮,啪啦一聲,燈泡瞬間破裂並刺穿了蒼蠅的身體,一瞬間,蒼蠅化成了一攤紅水,灑向了地面,地面上突然冒出了一隻紅色手,正試圖撥開土,往外爬,但在那隻手碰觸到掉在地板玻璃碎片時,那隻手突然停了下來
--|你走了,我卻未曾離開過 |-- CS.MM